#!/bin/sh

NAME=upnpd
PIDFILE=/var/run/$NAME.pid
DAEMON=/usr/sbin/$NAME
CFGFILE=/etc/default/$NAME

LAN=eth0
WAN=eth0

# For the UPnP library to function correctly, networking must be configured
# properly for multicasting as described in
# https://sourceforge.net/p/pupnp/code/ci/master/tree/README.
# Without this addition, device advertisements and control point searches will
# not function.
# However, the route has to be configured once for all UPnP applications
# (igd2-for-linux, ushare, ...) so do not manage UPnP route by default
MANAGE_UPNP_MULTICAST_ROUTE_ON_LAN=0

# Read configuration variable file if it is present
if [ -f $CFGFILE ]; then
	. $CFGFILE
fi

DAEMON_ARGS="-f $WAN $LAN"

start() {
	if [ $MANAGE_UPNP_MULTICAST_ROUTE_ON_LAN != 0 ]; then
		printf "Add UPnP multicast route on $LAN\n"
		route add -net 239.0.0.0 netmask 255.0.0.0 $LAN
	fi
	printf "Starting $NAME: "
	start-stop-daemon -S -q -m -b -p $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
	[ $? = 0 ] && echo "OK" || echo "FAIL"
}

stop() {
	printf "Stopping $NAME: "
	start-stop-daemon -K -q -p $PIDFILE
	[ $? = 0 ] && echo "OK" || echo "FAIL"
	if [ $MANAGE_UPNP_MULTICAST_ROUTE_ON_LAN != 0 ]; then
		printf "Remove UPnP multicast route on $LAN\n"
		route del -net 239.0.0.0 netmask 255.0.0.0 $LAN
	fi
}

restart() {
	stop
	start
}

case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|reload)
	restart
	;;
  *)
	echo "Usage: $0 {start|stop|restart|reload}"
	exit 1
esac

exit $?
